//
//  Father.m
//  DK_TestApp
//
//  Created by DK on 2017/4/12.
//  Copyright © 2017年 ChunYu. All rights reserved.
//

#import "Father.h"

@implementation Father
- (void)doSth{
    NSLog(@"father'doSth");
}
@end

@implementation Son
-(void)doSth{
    [super doSth];
    NSLog(@"son'doSth");
}
- (void)setName:(NSString *)name{
    
    NSLog(@"--->%@--->%@--->%@--->%@--->%@",
          self.class,self,object_getClass((id)self),super.class,self.superclass);
    // <<打印结果>> DK_TestApp[2780:107652] --->Son---><Son: 0x60800001c720>--->Son--->Son--->Father
   /*
    * self.class: 当前对象的类，self是个对象，所以它的class是父类Father
    * self: 当前对象
    * object_getClass((id)self): 运行时当前的对象对应的类
    * super.class: class是对象方法，super必然指向的是对象，super只能指的是self，因为Father并未直接实例化。但是它告诉了编译器调用的方法是父类方法，内部流程参照 http://blog.csdn.net/loving_ios/article/details/49884599
    * self.superClass: 当前对象的父类
    */
    
    
    NSLog(@"-----我是分割线----");
    [self doSth];// 调用自己的方法
    NSLog(@"-----我是分割线----");
    [super doSth];// 调用父类方法 doSth是对象方法，所以super首先是个对象，而不是类，其次，父类并没有直接实例化，实例化的是son
    NSLog(@"-----我是分割线----");
    /*  <<打印结果>>
     DK_TestApp[2780:107652] -----我是分割线----
     DK_TestApp[2780:107652] father'doSth
     DK_TestApp[2780:107652] son'doSth
     DK_TestApp[2780:107652] -----我是分割线----
     DK_TestApp[2780:107652] father'doSth
     DK_TestApp[2780:107652] -----我是分割线----
     */
    
}
@end
